<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script>
    /*
     Employee
      - name
      - salary
      - job
      - getInfo()
      - setSalary()
      - setJob()
      Manager
       - dept
       - insentive
       - setInsentive()
       - getInfo()
     * */
    function Employee(name){
        this.name = name;
        this.test = function(){
            console.log("클로저로에서 관심있어하는 녀석 : this가 아니라 비공개 영역의 변수다. "+name);
        };
    }
    Employee.prototype.getInfo = function(){
        return "name : "+this.name+", salary : "+this.salary+", job : "+this.job;
    };
    Employee.prototype.setSalary = function(salary){
        this.salary = salary;
    };
    Employee.prototype.setJob = function(job){
        this.job = job;
    };
    
    function Manager(name, dept){
        Employee.apply(this, [name]);
        this.dept = dept;
    }
    Manager.prototype = new Employee();
    Manager.prototype.constructor = Manager;

    Manager.prototype.setInsentive = function(incentive){
        this.incentive = incentive;
    };
    
    Manager.prototype.getInfo = function(){
        return "name : "+this.name+", salary : "+this.salary+", job : "+this.job + ", dept : "+this.dept+", insentive : "+this.incentive;
    };
    
    
    var emp = new Employee("홍길동");
    emp.setSalary(5000000);
    emp.setJob("개발자");
    
    var emp1 = new Employee("임꺽정");
    emp1.setSalary(70000000);
    emp1.setJob("개발자");
    
    var manager = new Manager("장길산", "개발1팀");
    manager.setInsentive(10000000);
    manager.setSalary(5000000);
    manager.setJob("관리자");
    
    console.log(emp.getInfo()); // 홍길동 개발자 5000만원
    console.log(emp1.getInfo()); // 홍길동 개발자 7000만원
    console.log(manager.getInfo()); // 홍길동 개발자 5000만원
    emp.name = "김개똥.";
    // name을 변경했으나 emp.text에서는 closer로 this의 내용이 아니라 비공개 영역의 자료를 참조한다.
    emp.test();
</script>
</head>
<body>

</body>
</html>